The popularity of mobile computing and communications devices has created a corresponding wish for the ability to deliver and receive information whenever wanted by users. Put simply, users want ubiquitous access to information and applications from a variety of devices, wherever, whenever, and whatever the devices' capabilities, and in addition, users want to be able to access and update such information on the fly, and they want guarantees that the data is as correct and up to date as can be.
There are a variety of distributed data systems that attempt to have devices and objects share replicas of data with one another. For instance, music sharing systems may synchronize music between a PC, a Cell phone, a gaming console and an MP3 player. Email data may be synchronized among a work server, a client PC, and a portable email device. However, today, to the extent such devices synchronize a set of common information among one another, the synchronization takes place according to a static setup among the devices. However, when these devices become disconnected frequently or intermittently, i.e., when they are loosely coupled such that they may become disconnected from communications with each other, e.g., when a cell phone is in a tunnel, or when the number of devices to be synchronized is dynamic, it becomes desirable to have a topology independent way for the devices to determine what changes each other device needs when they re-connect to one another, or as they join the network.
Today, as shown in FIG. 1, there are various examples where a master node 100 synchronizes in a dedicated manner with a client node 110, such as when an email server synchronizes with an email client. Due to the dedicated synchronization between the two devices, the information 102 needed to synchronize between the two devices can be tracked by the master node 100. Such information 102 can also optionally be tracked by client node 110 as well, however, when the connection between master node 100 and client node 110 becomes disconnected at times, and when the number of synchronizing devices increases, tracking the necessary information of the common information that each device needs across all of those devices becomes a difficult problem.
Current solutions often base their synchronization semantics solely on clocks or logical watermarks for a specific node (e.g., the email server), as opposed to any node. These systems can work well in cases of a single connecting node or master. However, they run into problems when the topology or pattern in which the nodes connect changes unpredictably.
Other systems build proprietary synchronization models for specific kinds of data objects, tracking an enormous amount of primitive metadata specific to the data format across the devices in order to handle the problem. For instance, to synchronize objects of a particular Word processing document format, a lot of overhead and complexity must go into representing a document and its fundamental primitives as they change over time, and representing that information efficiently to other devices wishing to synchronize according to a common set of Word processing documents. In addition to such systems being expensive and complex to build and non-extendible due to the custom data format upon which they are based, such systems are inherently unscalable due to large amounts of metadata that must be generated, analyzed and tracked.
In addition, the solutions only apply to the one specific domain, e.g., Word processing documents. When synchronization objects of all kinds are considered, e.g., pictures, videos, emails, documents, database stores, etc., one can see that implementing custom synchronization solutions based on each object type for tracking evolution of such objects across all devices in a multi-master environment is unworkable today. Accordingly, such solutions cannot be said to decouple the synchronization semantics from the data semantics.
Thus, there is a need for node-independent synchronization knowledge when computers in a topology change the way they connect to each other or as the number of computers grows. For instance, with a media player, it might be desirable to synchronize among multiple computers and multiple websites. In most instances, most applications can only synchronize data between a few well-known endpoints (home PC and media player). As the device community evolves over time for a user of the media player application, however, the need for data synchronization flexibility for the music library utilized by the devices increases, thereby creating the need for a more robust system.
The need becomes even more complex when one considers the growth of Web services endpoints that are increasingly involved in receiving, generation, processing, storage, updating and transmitting data, generating a variety of network traffic to or from devices. In this regard, in parallel with the evolution of synchronization needs of devices, a coincident trend is that more data is being created, stored, manipulated, transmitted, etc., by Web services, i.e., software systems designed to support interoperable machine to machine interaction over a network. Typically, Web services are Web APIs that can be accessed over a network by client devices, such as the Internet, and executed on a remote system hosting the requested services. However, there is no way to synchronize with Web services as a generic endpoint as part of a loosely coupled multi-master synchronization environment, either.
In this respect, from a synchronization standpoint in a multi-master environment, Web services implementations of an endpoint that can synchronize to any device would be a valuable scenario since two devices may not be able to connect directly, but may be able to connect via a common Web services endpoint. In this regard, complications arise when attempting to synchronize among loosely coupled devices and Web services when there is no mechanism for understanding, independent of the objects being synchronized, the collective knowledge of all of the set of devices that are connected, as those devices invariably connect and disconnect from one or more networks that couple them all together as part of an evolving and devolving network topology of nodes.
Thus, what is needed is an efficient, simple and universal mechanism for representing what each of the connected devices know and do not know, so that the common information can be pieced together to the maximum extent permitted by the collective knowledge of the individuals/devices. Moreover, there is a need to accommodate Web services as a synchronization node in such a multi-master system to help facilitate loosely connected systems of nodes to describe the data, and versions of the data, they have, to describe where they received the data, and to further describe what data they need from another node involved in the conversation.
Additional detail about these and other deficiencies in the current state of synchronization among loosely coupled devices may become apparent from the description of the various embodiments of the invention that follows.